Info

OOP - Object-Oriented Programming

POO - Programação Orientada a Objetos
É uma metodologia / paradigma para desenhar um programa com recurso ao uso de classes e objetos.

Simplifica o desenvolvimento de software e a manutenção, providenciando os seguintes conceitos:

  • Objeto
  • Classe
  • Herança
  • Polimorfismo
  • Abstração
  • Encapsulamento
Para além destes conceitos, há outros termos em POO:
  • Acoplamento
  • Coesão
  • Associação
  • Agregação
  • Composição

center

Objetos
Objetos são elementos do mundo real que abstraímos no mundo virtual para que possamos manipulá-los na resolução de problemas.
Os objetos têm estados e comportamentos

Que na programação orientada a objetos (POO) são equivalentes aos atributos e métodos.

Atributos

São as características, definidas como variáveis do objeto.

Métodos

São as ações, definidas como métodos* do objeto.

Exemplos de objetos

__

Objeto Atributos Métodos
pessoa nome, idade, genero falar, andar
carro matricula, marca acelerar, travar, buzinar
cão nome, raça latir, correr

__ <font color="#a5a5a5"><sup>*</sup> Em linguagem C são conhecidas como funções.</font>

Todos os objetos são oriundos de classes

Ou seja, são instâncias das classes.

Instância
Instância -> é um objeto gerado por uma classe.
  • A classe -> é a representação de um objeto
  • A instância -> é o objeto propriamente dito
O conteúdo de um objeto, o estado interno, é definido pelas suas variáveis de instância (atributos).

Dois objetos diferentes da mesma classe, podem possuir valores diferentes para os seus atributos e consequentemente apresentar estados internos diferentes.

center

Classe
Uma classe pode ser vista como o molde de onde se pode criar um objeto

Para que um objeto seja de uma determinada classe, terá obrigatoriamente que respeitar as especificações da classe.

Ou seja, Uma classe é uma descrição dos atributos e dos métodos de um determinado tipo de objeto
Exemplo de instâncias com uma classe Pessoa

__

Classe Pessoa Objeto Pessoa1 Objeto Pessoa2
Atributo nome Maria João
Atributo idade 15 25
Atributo genero F M

__

Informação
  • Pessoa1 e Pessoa2 são instâncias da classe Pessoa porque respeitam as especificações desta classe
  • Ou seja, obedecem aos estados (atributos) e compartimentos (métodos)

Código exemplo da classe Pessoa

  • class Pessoa{
    	//Atributos
    	String nome;
    	int idade;
    	char genero;
    }
    

Código exemplo dos métodos da classe Pessoa

  • class Pessoa{
    	//Métodos
    	void falar(){
    		System.out.println("Blá, blá, blá");
    	}
    }
    
Construtor
Um construtor não é um método, mas sim um bloco de código que é escutado sempre que utilizamos a palavra reservada new

A sua única função é criar uma instância da classe, um objeto.

Quando o construtor não é explicitamente declarado, o compilador insere um construtor default, isto é, sem parâmetros e com o corpo vazio

Exemplo

class Pessoa{
	//Construtores
	public Pessoa(){ //Construtor default
	}
	public Pessoa(String nome, int idade, char genero){
		this.nome = nome;
		this.idade = idade;
		this.genero = genero;
	}
}

O Construtor tem o mesmo nome da sua classe

Cada instância da classe (objeto) ocupa um lugar diferente na memória.

Exemplo de instâncias

class UsaPessoa(){
	public stativ void main(String[] args){
		//Duas instâncias da classe Pessoa. 
		Pessoa pessoa1 = new Pessoa("Maria", 15);
		Pessoa pessoa2 = new Pessoa("Joao", 25);
	}
}
Encapsulamento
Refere-se ao isolamento entre partes do programa

Com o objetivo de controlar o tipo de acesso às classes, atributos e métodos.

Usam-se os seguintes modificadores de acesso:
  • public: as classes, atributos e métodos são visíveis a partir de qualquer classe.
  • package: as classes, atributos e métodos são visíveis em classes do mesmo pacote da classe onde foram definidas, mas não nas suas subclasses.
  • protected: as classes, atributos e métodos são visíveis na classe onde foram definidos e as suas subclasses, independentemente do pacote onde estas últimas se encontram.
  • private: as classes, atributos e métodos são visíveis apenas dentro da mesma classe.
Get e Set
São utilizados para aceder aos atributos a partir de outras classes.

Os getter e os setter são responsáveis por fornecer meios para aceder ao estado de um objeto, isto é, obter e modificar os valores dos atributos de um objeto.

Get

Método que vai buscar o valor do atributo às nossas classes

Ex: getIdade()
Quando o método vai buscar um valor do tipo booleano, por convenção passa a usar-se a palavra is.
Ex: isIdade()
Set

Método que coloca valores dentro do atributo

Ex: setIdade(int idade);
Herança
Quando um objeto herda todas as propriedades e comportamentos de um objeto pai

Possibilita a reutilização de código.

Exemplo
carro
citadino
familiar
SUV

-> A classe carro é uma superclasse
-> carro possui os atributos e métodos comuns a todos os objetos carro
-> Cada uma das sub classes possuem atributos e métodos específicos de cada uma delas

Exemplo da superclasse carro

Atributos
private String matricula;
private int velocidadeAtual;
Métodos
public void ligar()
public void acelerar()
public void travar()
public void buzinar()
public void desligar()

Exemplo da subclasse citadino

Métodos
public void ligarACManual()

Exemplo da subclass familiar

Métodos
public void desligarAirbagPassageiro()

__

Para que as subclasses citadino, familiar, e SUV herdem as características da superclasse Carro é preciso usar a palavra reservada extends.
Exemplo:
public class UsaCitadino{
	public static void main(String[] args){
	Citadino citadino = new Citadino();
	citadinoAcelerar();
	}
}
Polimorfismo
Quando uma tarefa é executada de formas diferentes.

Em Java é utilizado o método overloading e o método overriding para obter o polimorfismo.

Por exemplo, falar algo: o gato fala "meow", o cão ladra "woof", o pato fala "quack", etc,.

center

Abstração
Esconder os detalhes internos e mostrar as funcionalidades
Por exemplo, uma chamada telefónica: não sabes como funciona o processamento interno.

Em Java, para obter abstração é necessário usar uma classe e interface abstratas.

Constante
Uma constante pode tanto ser definida como um atributo de classe como uma variável local.
Info
  • A atribuição do valor pode ser feita no momento da declaração ou posteriormente.
  • Depois de atribuído um valor não é permitido que outra atribuição seja efectuada.
  • Os nomes das constantes devem ser descritivos e escritos em maiúscula. Separar nomes internos com __
Syntax
final tipo IDENTIFICADOR = valor;
Exemplo
final double MIN_WIDTH = 100.0;

Variáveis

É um recipiente que armazena um valor

enquanto o programa Java é executado.

Existem 3 tipos de variáveis

-> Local
-> Global
-> Estática

Variável local

-> É declarada e usada dentro do método
-> Não pode ser definida como static

Variável global

-> É declarada dentro da classe, fora dos métodos
-> Não pode ser definida como static

Variável estática

-> Não pode ser local
-> A alocação na memória acontece apenas uma vez, enquanto a classe é carregada em memória

Variável Primitiva
São os tipos de blocos de manipulação de dados. São os tipos de dados mais básicos disponíveis na linguagem Java.
Tipos de variáveis primitivas:
Data Type Default Value Default size Value Syntax
boolean false 1 bit true, false Boolean one = false
char '\u0000' 2 byte 0 -> 65.535 char letterA = 'A'
byte 0 1 byt -128 -> 127 byte a = 10, byte b = -20
short 0 2 byte -32.768 -> 32.7 short s = 10000, short r = -5000
int 0 4 byte -2.(...).648 -> 2.(...).64 int a = 100000, int b = -200000
long 0L 8 byte -9.(...).808 -> 9.(...).807 long a = 100000L, long b = -200000L
float 0.0f 4 byte Ilimitado float f1 = 234.5f
double 0.0d 8 byte Ilimitado double d1 = 12.3

center

Regras:
  • Deve ser declarada antes de ser utilizada
  • Possui um tipo, um identificador e um alcance
  • São locais quando declaradas dentro de métodos
  • São atributos quando declaradas no corpo da classe
  • Podem ser inicializadas
    (tipo) (identificador) = (valor);

    Se não se colocar a privacidade antes do (tipo), por default a variável ficará public

Exemplo
int n1 = 20;
int n1 = 20, n2 = 30;
Nome da variável
  • Deve começar com uma letra, underscore, ou um $
  • Os caracteres subsequentes podem incluir os dígitos de 0 a 9

Métodos

Um método em Java é equivalente a uma função, subrotina ou procedimento em outras linguagens de programação.

Quando definimos um objeto num programa orientado a objetos, implementamos todo o comportamento desse objeto em um ou mais métodos.

Em Java não existe o conceito de métodos globais. Todos os métodos devem sempre ser definidos dentro de uma classe.
Syntax

[modificador] tipo_retorno identificador ([argumentos])

Exemplo
[modificador] tipo_retorno identificador ([argumentos]){
	//Corpo do método
	}
Retornar um valor
Para retornar valor, é necessário definir na frente do nome do método e o tipo do valor a ser retornado.

Pode ser:

  • primitivo
  • classe
  • interface
Se não é suposto o método retornar um valor, é obrigatória a utilização do tipo void.
return é utilizado para passar o valor requerido de volta para quem chamou o método.

Quando este comando é encontrado, o método termina imediatamente a sua execução.

center

Passar valor primitivo
Primitivo

-> Quando é passado na chamada do método, uma cópia deste valor é criada e atribuída ao argumento do método. Se o método alterar este valor, só será afectada nesse método.
center

Passar referência de um objeto
Referência de um objeto

-> Aqui, é passada uma referência ao objeto original, ao invés de uma cópia do objeto. Qualquer alteração, afetará o objeto original.
center

main
O método main é um método especial pois representa o ponto de entrada para a execução de um programa em Java
Syntax
public static void main(String[] args)
Nem todas as classes terão um método main

Uma classe que não possui um método main não pode ser “executada” pois não representa um programa em Java. Ela será sim, utilizada como classe utilitária para a construção de outras classes ou mesmo de um programa.

Estrutura

O desenvolvimento de aplicações Java sempre é feito através de classes. A definição de uma classe Java deve respeitar a seguinte sintaxe:
<modificador de acesso> class <nome da classe> { 
	<Declaração das Variáveis de Instância (Atributos)> 
	<Declaração de Métodos> 
	
	public static void main( String args[] ){ 
		//corpo principal do programa
	} 
} 

Argumentos

Um método pode ter zero ou mais argumentos (ou parâmetros)
Info

-> Caso não tenha argumentos, é necessário colocar os parênteses vazios tanto na definição como na chamada do método.
-> Assinatura do método: o nome do método acrescido dos seus parâmetros.
-> Cada argumento deve ser declarado especificando o tipo e o nome.
-> Caso seja mais que um argumento, cada declaração deve estar separada por vírgula.

Exemplo

center

Parâmetros

class

Palavra reservada que é usada para declarar um classe em java.

public

Palavra reservada que é um modificador de acesso que representa visibilidade. Significa que é visível para todos.

static

É uma palavra reservada. Se nós declararmos algum método como static, é conhecido como método estático.

Vantagem

Não é necessário criar um objeto para invocar o método estático. Por isso, economiza memória.

void

É um tipo de retorno de método. Significa que não retorna nenhum valor.

main

Representa o ponto de início do programa.

String args[]

É usado para argumento de linha de comando.

System.out.println()

É usada imprimir declarações.
-> System é uma class
-> out é o objeto da classe PrintStream
-> print() é o método da classe PrintStream

Tipos de dados

Existem 2 tipos de dados

-> Primitivos
-> Não primitivos

Interface Gráfica

Contentores
jPanel

jPanel

Construtor Descrição
JPanel() Constrói um painel
JPanel(LayoutManager layout) Constrói um painel associado a um determinado gestor de layout
Exemplo:
import javax.swing.*;

public class UsaJPanel{
	public static void main(String[] args){
		JFrame janela = new JFrame();
		janela.setTitle = new JFrame();
		janela.setTitle("JPanel");
		janela.setSize(350, 150);
		janela.setLocation(50,50);
		janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JPanel painel = new JPanel();
		janela.add(painel);
		janela.setVisible(true);

		JLabel rotulo = new JLabel("Escreve aqui o teu nome: ", SwingConstants.CENTER)
	}
}
JPanel Exemplo com janela centrada
package com.example;
 
import javax.swing.*;
import java.awt.*;
 
public class QuintaInterfaceGrafica {

	// Para aparecer no meio do ecra
    Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
    
    int h = (int)screen.getHeight();
    int w = (int)screen.getWidth();
    int jH = 150;
    int jW = 350;
	// -------------------------------------------

    JFrame window = new JFrame("Quinta Interface Gráfica");
    JLabel l1 = new JLabel("Nome:");
    JLabel l2 = new JLabel("Hobbies:");
    JTextField text = new JTextField(10);
    JCheckBox c1 = new JCheckBox("Ler"), c2 = new JCheckBox("Escrever"), c3 = new JCheckBox("Fotografia"), c4 = new JCheckBox("Filmar");
    JButton button = new JButton("SUBMETER");
    JPanel panel = new JPanel();
    public QuintaInterfaceGrafica() {

		// -------------------------------------------
        window.setSize(jW, jH);
        window.setLocation(w/2-jW/2, h/2-jH/2);
		// -------------------------------------------

        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setLayout(new GridLayout(3, 2));
        panel.setLayout(new GridLayout(2, 2));
        panel.add(c1);
        panel.add(c2);
        panel.add(c3);
        panel.add(c4);
        window.add(l1);
        window.add(text);
        window.add(l2);
        window.add(panel);
        window.add(button);
        window.setVisible(true);
    }
 
    public static void main(String[] args) {
        new QuintaInterfaceGrafica();
    }
}
Componentes
JFrame

JFrame

Construtor Descrição
JFrame() Constrói janela sem título
JFrame(StringTítulo) Constrói uma janela com o título indicado no parâmetro
Exemplo:

import javax.swing.*;

public static void main(String[] args){
	JFrame janela = new JFrame();
	janela.setTitle("jFrame");
	janela.setSize(350, 150);
	janela.setLocation(50,50); //Coordenadas da localização da janela
	janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Quando a janela é fechada a aplicação também
	janela.setVisible(true);
}
JLabel

JLabel


Construtor Descrição
JLable() Constrói uma label sem título
JLable(String Texto) Constrói uma label com o texto indicado no parâmetro
JLable(String texto, int alinhamentoHorizontal Constrói uma label com o texto e alinhamentos indicados
JLable(Icon icone) Constrói uma label com a imagem indicada no parâmetro
JLable(String texto, Icon icone, alinhamentoHorizontal) Constrói uma label com texto e imagem com o alinhamento indicado

Tipos de alinhamento da label (alinhamentoHorizontal):

Constantes (definidas na Swing Constantes)

0 CENTER
2 LEFT
4 RIGHT
10 LEADING
11 TRAILING
Exemplo:
public class UsaJLabel{
	public static void main(String[] args){
		JFrame janela = new JFrame();
		janela.setTitle("JLabel");
		janela.setSize(350,150);
		janela.setLocation(50,50);
		janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JLabel rotulo = new JLabel("Escreva aqui o seu nome: ");
		janela.add(rotulo);
		janela.setVisible(true);
	}
}

JTextField

JTextField

Construtor Descrição
JTextField() Constrói um campo de texto
JTextField(int colunas) Constrói um campo de texto com o nº de colunas indicado
JTextField(String texto) Constrói um campo de texto com o texto indicado
JTextField(String texto, int colunas Constrói um campo de texto com o texto e as colunas indicadas. As colunas indicam a largura do campo
Exemplo:

import java.awt.FlowLayout;

public class UsaJTextField{
	public static void main(String[] args){
		JFrame janela = new JFrame();
		janela.setTitle("JTextField");
		janela.setSize(350,150);
		janela.setLocation(50,50);
		janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		janela.setLayout(new FlowLayout());
		//Como a janela (JFrame) só acerta um componente de cada vez necessitamos aplicar um gestor de layout para adicionar o rótulo e a caixa de texto.
		JLabel rotulo = new JLabel("Escreva aqui o seu nome: ");
		JTextField caixaTexto = new JTextField(10);
		janela.add(rotulo);
		janela.add(caixaTexto);
		janela.setVisible(true);
	}
}
JTextArea

JTextArea

Construtor Descrição
JTextArea() Constrói uma área de texto com dimensão 0
JTextArea(String texto) Constrói uma área de texto com o texto indicado no parâmetro
JTextArea(int linhas, int colunas) Constrói uma área de texto com o nº de linhas e colunas nos parâmetros
JTextArea(String texto, int linhas, int colunas Constrói uma área de textp com o nº de linhas, colunas e texto indicado no parâmetro
Exemplo:

import javax.Swing.*;
import java.awt.*;

public class UsaTextoArea{
	public static void main(String[] args){
		JFrame janela = new JFrame();
		janela.setTitle("JTextArea");
		janela.setSize(350, 150);
		janela.setLocation(50, 50);
		janela.setDefaultClose(JFrame.EXIT_ON_CLOSE);
		janela.setLayout(new FlowLayout());
		JLabel rotulo = new JLabel("Observações: ");
		JTextArea areaTexto = new JTextArea();
		areaTexto.setLineWrap(true); //Passar para baixo quando chega ao limite
		areaTexto.setWrapStyleWord(true); //Não deixa fazer quebra de linha a meio de uma palavra
		JScrollPane areaRolamento = new JScrollPane(areaTexto);
		areaRolamento.setPreferredSize(new Dimensions(325, 80));
		janela.add(rotulo);
		janela.add(areaRolamento);
		janela.setVisible(true);
	}
}

center

JButton

JButton

Construtor Descrição
JButton() Constrói um botão sem texto
JButton(String texto) Constrói um botão com o texto no parâmetro
JButton(String texto, icon icone Constrói um botão com o texto e a imagem indicada no parâmetro
JButton(icon icone) Constrói um botão com uma imagem indicada no parâmetro
Exemplo:

public class UsaButton{
	public static void main(String[] args){
		JFrame janela = new JFrame();
		janela.setTitle("JButton");
		janela.setSize(310,150);
		janela.setLocation(50,0);
		janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		JButton botao = new JButton("OK");
		janela.add(botao);
		janela.setVisible(true);
	}
}
JComboBox

JComboBox

Construtor Descrição
JComboBox Constrói uma caixa de seleção vazia
JComboBox(Objeto[] itens) Constrói uma caixa de seleção com itens contidos no array indicado no parâmetro
JComboBox(Vetor<?> itens) Constrói uma caixa de seleção com itens contidos na coleção do tipo vetor indicado no parâmetro
JComboBox(ComboBoxModel cbm Constrói uma caixa de seleção que utiliza o modelo passado como parâmetro. Utilizado para, por exemplo, listar os dados de um campo de uma base de dados
Exemplo:

public class UsaComboBox{
	public static void main(String[] args){
		JFrame janela = new JFrame();

		janela.setTitle("JComboBox");
		janela.setSize(320,150);
		janela.setLocation(50, 50);
		janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		janela.setLayout(new FlowLayout());

		JLabel rotulo = new JLabel ("Selecione uma cor: ");

		JComboBox caixas = new JComboBox();

		caixas.addItem1("Branco");
		caixas.addItem2("Preto");
		caixas.addItem3("Amarelo");

		janela.add(rotulo);
		janela.add(caixas);

		janela.setVisible(true);
	}
}
JCheckBox

JCheckBox

Construtor Descrição
JCheckBox() Constrói uma caixa de opção sem qualquer texto ou imagem
JCheckBox(String texto) Constrói uma caixa de opção com o texto indicado no parâmetro
JCheckBox(String texto, boolean estado) Constrói uma caixa de opção associada ao texto e com o estado indicado no parâmetro. Se true está selecionado, se false não está selecionado.
JCheckBox(Icon icone, boolean estado)
JCheckBox(String texto, Icon icone)
JCheckBox(String texto, Icon icone, boolean estado)
Exemplo:

public class UsaJCheckBox{
	public static void main(String[] args){
		JFrame j = new JFrame();
		j.setTitle("JCkeckBox");
		j.setSize(350, 16);
		j.setLocation(50,50);
		j.setDefaultCoseOperation(JFrame.EXIT_ON_CLOSE);
		j.setLayout(new FlowLayout());

		JCheckBox caixaV1 = new JCheckBox("Branco");
		JCheckBox caixaV2 = new JCheckBox("Preto");
		JCheckBox caixaV3 = new JCheckBox("Amarelo");

		j.add(caixaV1);
		j.add(caixaV2);
		j.add(caixaV3);

		j.setVisible(true);
	}
}
JRadioButton

JRadioButton

construtor descrição
JRadioButton() Constrói um botão de rádio sem qualquer texto ou imagem associados
JRadioButton(String texto) Constrói um botão de rádio associado ao texto indicado no parâmetro
JRadioButton(Icon icon) Constrói um botão de rádio associado à imagem indicada no parâmetro
JRadioButton(String texto, boolean estado) Constrói um botão de rádio associado ao texto e com o estado indicado no parâmetro. Se o estado for "true", o botão está inicialmente selecionado, se for "false" não está
JRadioButton(String texto, Icon icon)
JRadioButton(String texto, Icon icon, boolean estado)
Exemplo:

public class UsaRadioButton {
		public static void main (String[] args) {
			JFrame janela = new JFrame();
			janela.setTile("JRadioButton");
			janela.setSize(350, 150);
			janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLICK);
			janela.setLayout(new FlowLayout);
			JRadioButton botaoRadio1 = new JRadioButton("Branco");
			JRadioButton botaoRadio2 = new JRadioButton("Preto");
			JRadioButton botaoRadio3 = new JRadioButton("Amarelo");
			janela.add(botaoRadio1);
			janela.add(botaoRadio2);
			janela.add(botaoRadio3);
			janela.setVisible(true);
		}
	}
JTable

JTable

construtor descrição
JTable() Constrói uma tabela vazia
JTable(int linhas, int colunas) Constrói uma tabela vazia com o número de linhas e colunas indicada nos parâmetros
JTable(Object[][] dados, Object[][] titulos) Constrói uma tabela com os dados e os títulos das colunas indicados nos parâmetros
JTable(vetor dados, vetor titulos) Constrói uma tabela com os dados e os títulos das colunas indicados nos parâmetros
JTable(TableModel tm) Constrói de acordo com o modelo indicado no parâmetro utilizado para, por exemplo, listar dados de uma base de dados
Exemplo:

public class UsaTable {
		public static void main (String[] args) {
			Object[][] produtos = {
				{new Integer(1), "lápis", "Lápis & Co."},
				{new Integer(2), "caneta", "Canetas & Canetas"},
				{new Integer(3), "caderno", "Cadernos e Outros"}
			};
			String[] titulos = {"Código", "Produto", "Fornecedor"};
			JFrame janela = new JFrame();
			janela.setTitle("JTable");
			janela.setSize(350, 150);
			janela.setLocation(50, 50);
			janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			JTable tabela = new JTable(produtos, titulos);
			JScrollPane areaRolamento = new JScrollPane(tabela);
			tabela.setPreferredScrollableViewportSize(new Dimension(325, 20));
			janela.add(areaRolamento);
			janela.setVisible(true);
		}
	}
JMenuBar, JMenu, JMenuItem

JMenuBar, JMenu, JMenuItem

center

Exemplo:

public class UsaMenus {
		public static void main (String[] args) {
			JFrame janela = new JFrame();
			janela.setTitle("JTable");
			janela.setSize(350, 150);
			janela.setLocation(50, 50);
			janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			JMenuBar barraMenu = new JMenuBar();
			JMenu menuContentores = new JMenu("Contentores");
			JMenuItem jmiJFrame = new JMenuItem("JFrame");
			JMenuItem jmiJPanel = new JMenuItem("JPanel");
			JMenu menuCaixasTexto = new JMenu("Caixas texto");
			JMenuItem jmiJTextField = new JMenuItem("JTextField");
			JMenuItem jmiJTextArea = new JMenuItem("JTextArea");
			JMenu menuBotoes = new JMenu("Botões");
			JMenuItem jmiJButton = new JMenuItem("JButton");
			JMenuItem jmiJCheckBox = new JMenuItem("JCheckBox");
			JMenuItem jmiJRadioButton = new JMenuItem("JRadioButton");
			JMenu menuOutrosComponentes = new JMenu("Outros");
			JMenuItem jmiJLabel = new JMenuItem("JLabel");
			JMenuItem jmiJComboBox = new JMenuItem("JComboBox");
			JMenuItem jmiJTable = new JMenuItem("JTable");
			janela.setJMenuBar(barraMenu);
			barraMenu.add(menuContentores);
			menuContentores.add(jmiJFrame);
			menuContentores.add(jmiJPanel);
			barraMenu.add(menuCaixasTexto);
			menuCaixasTexto.add(jmiJTextField);
			menuCaixasTexto.add(jmiJTextArea);
			barraMenu.add(menuBotoes);
			menuBotoes.add(jmiJButton);
			menuBotoes.add(jmiJCheckBox);
			menuBotoes.add(jmiJRadioButton);
			barraMenu.add(menuOutrosComponentes);
			menuOutrosComponentes.add(jmiJLabel);
			menuOutrosComponentes.add(jmiJComboBox);
			menuOutrosComponentes.add(jmiJTable);
			janela.setVisible(true);
		}
	}
showMessageDialog

showMessageDialog

Mostra uma mensagem e espera até que o utilizador pressione o botão "Ok".
Pasted image 20231023164240.png

Exemplo:

public class UsaJOPSShowMessageDialog{
	public static void main (String[] args) {
		JOptionPane.showMessageDialog(null, "Obrigado por ter utilizado este programa");
	}
}
showConfirmDialog

showConfirmDialog

Exibe uma questão e aguarda até que o utilizador responda pressionando um dos botões "YES", "NO" ou "CANCEL".
Pasted image 20231023164301.png

Exemplo:

public class UsaJOPShowConfirmDialog {
	public static void main (String[] args) {
		int opcaoEscolhida = JOptionPane.showConfirmDialog(null, "Deseja guardar as alterações?");
		System.out.println("A opção escolhida foi " + opcaoEscolhida);
		}
	}
showInputDialog

showInputDialog

Apresenta uma caixa de texto na qual o utilizador poderá inserir informação e confirmar a mesma através do botão "OK" ou cancelá-la através do botão "CANCEL"
Pasted image 20231023164316.png

Exemplo:
public class usaJOPShowInputDialog {
		public static void main (String[] args) {
			String nome = JOptionPane.showInputDialog("Escreva o seu nome");
			System.out.print("O nome inserido foi: " + nome);
		}
	}
showOptionDialog

showOptionDialog

Possibilita a introdução de elementos definidos pelo programador.
Pasted image 20231023164327.png

Exemplo:
public class usaJOPShowOptionDialog {
		public static void main (String[] args) {
			String tiposLigacao = {"wireless", "adsl", "fibra ótica"};
			int opcao = JOptionPane.showOptionDialog(null, "Escolha uma das ligações: ", "Tipos de ligação", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, tiposLigacao, "wireless");
			System.out.print("A opção escolhida foi " + opcao);
		}
	}
Gestores de Layout
FlowLayout

FlowLayout

construtor                                      descrição                                                                                                                                     
FlowLayout()                                    Constrói um FlowLyaout com alinhamento ao centro e um espaçamento horizontal e vertical, entre os componentes, de 5 unidades                  
FlowLayout(int alinhamento)                     Constrói um FlowLayout com o alinhamento especificado no parâmetro e um espaçamento horizontal e vertical, entre os componentes, de 5 unidades
FlowLayout(int alinhamento, int hgap, int vgap) Constrói um FlowLayout com o alinhamento especificado no parâmetro e espaçamento horizontais e verticais, entre os componentes, especificados nos parâmetros                                                                                                                                              
Alinhamento pode ser:

LEFT(0)
CENTER(1)
RIGHT(2)
LEADING(3)

Pasted image 20231023164344.png

Exemplo:
public class UtilizaGridLayout {  
  public static void main (String[] args) {  
    JFrame janela = new JFrame();  
    janela.setTitle("FlowLayout");  
    janela.setSize(350, 150);  
    janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
    janela.setLayout(new FlowLayout());  
    JLabel rotulo = new JLabel ("Escreva o seu nome: ");  
    JTextField caixaTexto = new JTextField(10);  
    JButton botao = new JButton("OK");  
    janela.add(rotulo);  
    janela.add(caixaTexto);  
    janela.add(botao);  
    janela.setVisible(true);  
  }  
}
GridLayout

GridLayout

construtor                                              descrição                                                                           
GridLayout()                                            Constrói uma GridLayout com uma linha e uma coluna                                  
GridLayout(int linhas, int colunas)                     Constrói uma GridLayout com o número de linhas e colunas especificado nos parâmetros
GridLayout(int linhas, int colunas, int hgap, int vgap) Constrói uma GridLayout com o número de linhas e colunas, e espaçamento verticais e horizontais especificado nos parâmetros                                                                                    

Pasted image 20231023164413.png

Exemplo:
public class UtilizaGridLayout {  
    public static void main (String[] args) {  
        JFrame janela = new JFrame();  
        janela.setTitle("GridLayout");  
        janela.setSize(350, 150);  
        janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
        janela.setLayout(new FlowLayout());  
        JLabel rotulo1 = new JLabel ("Escreva o nome de um fruto: ");  
        JTextField caixaTexto = new JTextField(10);  
        JLabel rotulo2 = new JLabel ("Selecione uma bebida: ");  
        JComboBox caixaCombinacao = new JComboBox();  
        caixaCombinacao.add("Água");  
        caixaCombinacao.add("Vinho");  
        JButton botao = new JButton("OK");  
        janela.add(rotulo1);  
        janela.add(caixaTexto);  
        janela.add(rotulo2);  
        janela.add(caixaCombinacao);  
        janela.add(botao);  
        janela.setVisible(true);          
    }  
}  
BorderLayout

BorderLayout

construtor                       descrição                                                             
BorderLayout()                   Constrói um BorderLayout sem qualquer espaçamento entre os componentes
BorderLayout(int hgap, int vgap) Constrói um BorderLayout com o espaçamento horizontal e vertical entre os componentes especificados nos parâmetros                                                                                 

Pasted image 20231023164428.png

Exemplo:
public class UtilizaBorderLayout {  
    public static void main (String[] args) {  
        JFrame janela = new JFrame();  
        janela.setTitle("BorderLayout");  
        janela.setSize(350, 150);  
        janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
        janela.setLayout(new BorderLayout());  
        JButton botaoNorte = new JButton("Norte");  
        JButton botaoSul = new JButton("Sul");  
        JButton botaoOeste = new JButton("Oeste");  
        JButton botaoEste = new JButton("Este");  
        JButton botaoCentro = new JButton("Centro");  
        janela.add("North", botaoNorte);  
        janela.add("South", botaoSul);  
        janela.add("West", botaoOeste);  
        janela.add("East", botaoEste);  
        janela.add("Center", botaoCentro);  
        janela.setVisible(true);  
    }  
}
BoxLayout

BoxLayout

O construtor BoxLayout(container contentor, int eixo) constrói um BoxLayout associado ao contentor e com a disposição dos componentes especificada nos parâmetros.
O parâmetro eixo poderá ter um dos valores definidos nas constantes do tipo inteiro:
X_AXIS(0)
Y_AXIS(1)
Estas constantes estão definidas na classe BoxLayout.
Pasted image 20231023164446.png

Exemplo:
public class UtilizaBoxLayout {  
  public static void main (String[] args) {  
    JFrame janela = new JFrame();  
    janela.setTitle("BoxLayout");  
    janela.setSize(350, 150);  
    janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
    JPanel painel = new JPanel();  
    painel.setLayout(new BoxLayout(painel, BoxLayout.Y_AXIS));  
    for (int i = 0; i < 5; i++) {  
      painel.add(new JButton("Botão " + (i+1)));  
    }  
    janela.add(painel);  
    janela.setVisible(true);  
  }  
}

Eventos

Tratamento de eventos
Eventos são objetos que descrevem uma alteração no estado de um componente
  • Estão definidos em classes dos pacotes java.awt.event e javax.swing.event
  • Exemplos: clicar num botão, pressionar uma tecla, ou selecionar um item.
Um evento é gerado num determinado componente e enviado para um listener
  • Os listeners têm como objetivo esperar pelos eventos
  • Quando recebe o evento, processa-o e retorna ao ponto onde o evento foi gerado.
  • Os listeners estão definidos em interfaces dos pacotes java.awt.event, javax.swing.events e java.beans.
  • Um listener tem de implementar todos os métodos de interface que correspondem ao evento que está a receber.
    Exemplo
    • Utilizador clica num botão.
    • É gerado um evento  da classe ActionEvent.
    • O evento é enviado para um listener da interface ActionListener.
    • O listener terá, então, de implementar todos os métodos de interface ActionListener, ou seja, o método ActionPerformed, uma vez que é o único.
Principais eventos e respectivos listeners
Evento (classe) Descrição                                                                                                                               Listerner (interface)
ActionEvent     Eventos de ação como um clique do rato sobre um botão ou o pressionar da tecla [Enter] numa caixa de texto.                      ActionListener       
ItemEvent       Eventos gerados quando um item é selecionado numa caixa de combinação, numa caixa de seleção ou num botão de rádio, por exmeplo. ItemListener         
KeyEvent        Eventos originados pela entrada de informação a partir do teclado.                                                        KeyListener          
MouseEvent      Eventos gerados pelo rato, quando, por ex., é clicado, pressionado, libertado, arrastado e movido.                        MouseListener        
FocusEvent      Eventos de foco gerados quando um componente recebe ou perde o foco.                                                      FocusListener        
WindowEvent     Eventos gerados pelas janelas quando etas são abertas, fechadas, maximizadas, minimizadas, etc.                           WindowListener       
Metódos das interfaces
O listener terá de implementar todos os métodos da interface correspondente ao evento
Listener (interface) Métodos                                                                                                                                                        
ActionListener       actionPerformed(ActionEvent ev*
ItemListener         itemStateChanged(ItemEvent ev)  
KeyListener          keyPressed(KeyEvent ev)
keyReleased(KeyEvent ev)
keyTyped(KeyEvent ev) 
MouseListener        mouseEntered(MouseEvent ev)
mouseExited(MouseEvent ev)
mouseReleased(MouseEvent ev)
mousePressed(MouseEvent ev)
mouseClicked(MouseEvent ev)
FocusListener        focusGained(FocusEvent ev)
focusLost(FocusEvent ev)   
WindowListener       windowActivated(WindowEvent ev)
windowDeactivated(WindowEvent ev)
windowIconified(WindowEvent ev)
windowDeiconified(WindowEvent ev)
windowOpened(WindowEvent ev)
windowClosed(WindowEvent ev)
windowClosing(WindowEvent ev) 
* Variável associada ao evento

Costuma ser:

  • e
  • ev
  • evt
Exercício 1

Pasted image 20231025093507.png
Pasted image 20231025093551.png
Pasted image 20231025093615.png

Exemplo 1
1º Exemplo: Evento é processado na mesma classe onde o Listener se registou
public class ExemploActionEvent1 implements ActionListener {  

	  JFrame janela = new JFrame("ExemploActionEvent");  
	  JPanel painel = new JPanel();  
	  JButton botao1 = new JButton("Botão 1");  
	  JButton botao2 = new JButton("Botão 2");  
	  JLabel rotulo = new JLabel();
    
  public ExemploActionEvent1() {  
	    janela.setSize(350,150);  
	    janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
	    janela.setVisible(true);  
	    painel.add(botao1);  
	    painel.add(botao2);  
	    painel.add(rotulo);  
	    janela.add(painel);  
	    botao1.addActionListener(this); // Registo do Listener  
	    botao2.addActionListener(this); // Registo do Listener  
  }  
  
  public void actionPerformed(ActionEvent e) {  
	    if (e.getSource() == botao1) {  
	      rotulo.setVisible(true);  
	      rotulo.setText("Carregou no Botão 1!");  
	    }  
	    if (e.getSource() == botao2) {  
	      rotulo.setVisible(false);  
	      JOptionPane.showMessageDialog(janela, "Carregou no Botão 2!");  
	    }  
  }
    
  public static void main (String[] args) {  
	    new ExemploActionEvent1();  
  }  
}  
Exemplo 2
2º Exemplo: O evento é processado numa classe diferente daquela onde o listener se regista
public class ExemploActionEvent2{

    JFrame janela = new JFrame("ExemploActionEvent");
    JPanel painel = new JPanel();
    JButton botao1 = new JButton("Botão 1");
    JButton botao2 = new JButton("Botão 2");
    JLabel rotulo = new JLabel();

    public ExemploActionEvent2() {

        janela.setSize(350,150);
        janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        janela.setVisible(true);
        painel.add(botao1);
        painel.add(botao2);
        painel.add(rotulo);
        janela.add(painel);
        botao1.addActionListener(new ProcessaBotoes()); // Registo do Listener
        botao2.addActionListener(new ProcessaBotoes()); // Registo do Listener
    }

    private class ProcessaBotoes implements ActionListener {

        public void actionPerformed(ActionEvent e) {

            if (e.getSource() == botao1) {
                rotulo.setVisible(true);
                rotulo.setText("Carregou no Botão 1 !");

            }

            if (e.getSource() == botao2) {
                rotulo.setVisible(true);
                JOptionPane.showMessageDialog(janela, "Carregou no Botão 2 !");
            }
        }
    }

    public static void main (String[] args) {

        new ExemploActionEvent2();

    }
}  
Exemplo 3
3º Exemplo: o evento é processado na mesma classe onde o listener se registou. A classe "ExemploActionListener3" estende a classe "JFrame"
Exemplo 4
4º Exemplo: o evento é processado numa classe diferente daquela onde o listener se registou. A classe ExemploActionEvent4 estende a classe JFrame.
public class ExAula extends JFrame{
    
    JPanel painel = new JPanel(); 
    JButton botao1 = new JButton("Botão 1");  
    JButton botao2 = new JButton("Botão 2");  
    JLabel rotulo = new JLabel();
    
    public ExAula() {
       setSize(300,150);  
       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
       setVisible(true);  
       painel.add(botao1);  
       painel.add(botao2);  
       painel.add(rotulo);  
       add(painel);  
       botao1.addActionListener(new ProcessaBotoes());  
       botao2.addActionListener(new ProcessaBotoes()); 
    }
       
    public static void main(String[] args){
        new ExAula();
    }
       
    private class ProcessaBotoes implements ActionListener{
           
        public void actionPerformed (ActionEvent e){

            if(e.getSource() == botao1){
                rotulo.setVisible(true);
                rotulo.setText("Carregou no Botão 1 !");  
            }
            if(e.getSource() == botao2){
                rotulo.setVisible(false);
                JOptionPane.showMessageDialog(null, "Carregou no Botão 2 !"); 
            }
        } 
    }
}

Exemplos

Ter ponto e vírgula no final da classe é opcional em java. Exemplo:

1. class A{    
2.    static public void main(String... args){    
3.       System.out.println("hello java");    
4.    }    
5. };
OUTPUT

hello java
Soma de dois números
package com.mycompany.first;

public class somaDoisNumeros {
  
  public static void main(String[] args){
    
    int a = 10;
    int b = 10;
    int c = a + b;
    
    System.out.println(c);
    System.out.println("CLASSE SOMA DOIS NUMEROS");
  }
}
OUTPUT

20
Alargar (int to float)
package com.mycompany.first;

public class first {
  
  public static void main(String[] args){
    
    int a = 10;
    float f = a;
    
    System.out.println(a);
    System.out.println(f);
  }
}
OUTPUT

10
10.0
Encolher (float to int) (cast)
package com.mycompany.first;

public class first {

  public static void main(String[] args) {
    
    float f = 10.5f;
    int a = (int) f;
    
    System.out.println(f);
    System.out.println(a);
    
   }
}
OUTPUT

10.5
10
Overflow - Exceder o limite máx/min
package com.mycompany.first;

public class first {

  public static void main(String[] args) {
    
    int a = 130;
    byte b = (byte)a;
    
    System.out.println(a);
    System.out.println(b);
    
   }
}
OUTPUT

130
-126
Somar o tipo menor
package com.mycompany.first;

public class first {

  public static void main(String[] args) {
    
    byte a = 10;
    byte b = 10;
    
    byte c = (byte)(a+b);
  //byte c = a + b; //Aqui, o resultado será por default int
  
    System.out.println(c);
    
   }
}
OUTPUT

20
1 - Maquina de Somar e Subtrair
ActionEvent
package com.darque.graphicaula;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

/**
 *
 * @author Darque
 */
public class MaquinaSomarSubtrair extends JFrame{
    
    JLabel labelValor1 = new JLabel ("Primeiro número");
    JTextField textValor1 = new JTextField(5);
    JLabel labelValor2 = new JLabel ("Segundo número");
    JTextField textValor2 = new JTextField(5);
    JButton botaoSomar = new JButton("Somar");
    JButton botaoSubtrair = new JButton("Subtrair");
    JLabel labelResultado = new JLabel ("Resultado");
    JTextField textResultado = new JTextField(5);
    
    //Construtor
    private MaquinaSomarSubtrair() {
        
        setTitle("Máquina de Somar e Subtrair");
        setSize(300,150);
        setLocation(50, 50);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new GridLayout(4,2));
        setVisible(true);
        
        add(labelValor1);
        add(textValor1);
        add(labelValor2);
        add(textValor2);
        add(botaoSomar);
        add(botaoSubtrair);
        add(labelResultado);
        textResultado.setEditable(false);
        add(textResultado);
        
        botaoSomar.addActionListener(new EventoBotao());
        botaoSubtrair.addActionListener(new EventoBotao());
        
    }
    
    public static void main(String[] args) {
        new MaquinaSomarSubtrair();
    }
    
    //Classe interna que implementa os métodos da interface ActionListener
    private class EventoBotao implements ActionListener {
        public void actionPerformed (ActionEvent e){
            
            double resultado = 0;
            String resultadoString = "";
            
            if(e.getSource() == botaoSomar){
                resultado = Double.parseDouble(textValor1.getText()) + Double.parseDouble(textValor2.getText());
            }
            else{
                resultado = Double.parseDouble(textValor1.getText()) - Double.parseDouble(textValor2.getText());
            }
            
            resultadoString = Double.toString(resultado);
            textResultado.setText(resultadoString);
            
        }
    }
    
}
2 - Conversor Temperatura
ActionEvent
package com.darque.graphicaula;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;

/**
 *
 * @author Darque
 */
public class ConversorTemperatura extends JFrame{
    
    JLabel labelTipoConversao = new JLabel("Tipo de conversão: ");
    JRadioButton CF = new JRadioButton("ºC-ºF");
    JRadioButton FC = new JRadioButton("ºF-ºC");
    ButtonGroup grupoBotoes = new ButtonGroup();
    JPanel painel = new JPanel();
    JLabel labelValorAConverter = new JLabel("Valor a converter: ");
    JTextField textValor = new JTextField(5);
    JButton converter = new JButton("CONVERTER");
    
    //Construtor
    
    private ConversorTemperatura(){
        
        setTitle("Conversor Temperatura");
        setSize(280, 130);
        setLocation(50,50);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new GridLayout(3,2,1,5));
        setVisible(true);
        
        add(labelTipoConversao);
        painel.setLayout(new GridLayout(1,2));
        painel.add(CF);
        painel.add(FC);
        add(painel);
        add(labelValorAConverter);
        add(textValor);
        add(converter);
        
        grupoBotoes.add(CF);
        grupoBotoes.add(FC);
        
        converter.addActionListener(new EventoBotao());
        
    }
    
    public static void main(String[] args) {
        new ConversorTemperatura();
    }
    
    //Classe interna que implementa os métodos da interface ActionListener
    private class EventoBotao implements ActionListener {

        public void actionPerformed (ActionEvent e) {
            
            double resultado;
            String mensagem = "";
            
            if(CF.isSelected()){
                resultado = Double.parseDouble(textValor.getText()) * 9 / 5 + 32;
                mensagem = Double.toString(resultado) + "ºF";
            }
            else if(FC.isSelected()){
                resultado = Double.parseDouble(textValor.getText()) - 32 * 5 / 9;
                mensagem = Double.toString(resultado) + "ºC";
            }
            else{
                mensagem = "Selecione um tipo de conversão!";
            }
            
            JOptionPane.showMessageDialog(null, mensagem);
            
        }
    } 
    
}
3 - Conversor Comprimento
ActionEvent
package com.darque.graphicaula;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DecimalFormat;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.ButtonGroup;
import javax.swing.JOptionPane;

/**
 *
 * @author Darque
 */
public class ConversorComprimento extends JFrame implements ActionListener{
    
    JLabel labelValorAConverter = new JLabel("Valor a converter: ");
    JTextField textValor = new JTextField(10);
    
    JRadioButton mtMi = new JRadioButton("metros - milhas");
    JRadioButton miMt = new JRadioButton("milhas - metros");
    
    ButtonGroup group  = new ButtonGroup();
    
    public ConversorComprimento(){
        
        setSize(280,100);
        setLocation(50,50);
        setTitle("Conversor Comprimento");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new FlowLayout());
        
        group.add(mtMi);
        group.add(miMt);
        add(labelValorAConverter);
        add(textValor);
        add(mtMi);
        add(miMt);
        setVisible(true);
        
        mtMi.addActionListener(this);
        miMt.addActionListener(this);
      
    }
    
    public void actionPerformed(ActionEvent e){
        
        String stringValue = textValor.getText();
        double valor = Float.parseFloat(stringValue);
        DecimalFormat formato = new DecimalFormat("###.###");
        
        if(mtMi.isSelected()){ //metros - milhas
            valor = valor*0.000621371;
            //stringValue = String.valueOf(valor); // Sem o Decimal Format
            stringValue = formato.format(valor) + " milhas";
            //textValor.setText(stringValue); // Para adicionar o resultado ao text field
            JOptionPane.showMessageDialog(null, stringValue);
        }
        else if (miMt.isSelected()) { //milhas - metros
            valor = valor*1609.34;
            //stringValue = String.valueOf(valor); // Sem o Decimal Format
            stringValue = formato.format(valor) + " metros";
            //textValor.setText(stringValue); // Para adicionar o resultado ao text field
            JOptionPane.showMessageDialog(null, stringValue);
        }
        
    }
    
    public static void main(String[] args) {
        new ConversorComprimento();
    } 
}
ItemEvent
package com.darque.graphicaula;

import java.awt.FlowLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.text.DecimalFormat;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.ButtonGroup;
import javax.swing.JOptionPane;

/**
 *
 * @author Darque
 */
public class ConversorComprimento extends JFrame implements ItemListener {
    
    JLabel labelValorAConverter = new JLabel("Valor a converter: ");
    JTextField textValor = new JTextField(10);
    
    JRadioButton mtMi = new JRadioButton("metros - milhas");
    JRadioButton miMt = new JRadioButton("milhas - metros");
    
    ButtonGroup group  = new ButtonGroup();
    
    DecimalFormat formato = new DecimalFormat("###.##");
    
    public ConversorComprimento(){
        
        setSize(280,100);
        setLocation(50,50);
        setTitle("Conversor Comprimento");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new FlowLayout());
        
        group.add(mtMi);
        group.add(miMt);
        add(labelValorAConverter);
        add(textValor);
        add(mtMi);
        add(miMt);
        setVisible(true);
        
        miMt.addItemListener(this);
        mtMi.addItemListener(this);
      
    }
    
    public void itemStateChanged(ItemEvent e){
        
        String valorString;
        double valor = Double.parseDouble(textValor.getText());
        
        if(e.getSource() == mtMi || e.getSource() == miMt){
            
            if (mtMi.isSelected()) {
                valor = valor * 0.000621371;
                valorString = formato.format(valor) + " miles";
                JOptionPane.showMessageDialog(null, valorString);
            }
            else if(miMt.isSelected()) {
                valor = valor * 1609.34;
                valorString = formato.format(valor) + " meters";
                JOptionPane.showMessageDialog(null, valorString);
            }
        }    
    }
    
    public static void main(String[] args) {
        new ConversorComprimento();
    } 
}
ItemEvent com classe interna
package com.darque.graphicaula;

import java.awt.FlowLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.text.DecimalFormat;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.ButtonGroup;
import javax.swing.JOptionPane;

/**
 *
 * @author Darque
 */
public class ConversorComprimento extends JFrame {
    
    JLabel labelValorAConverter = new JLabel("Valor a converter: ");
    JTextField textValor = new JTextField(10);
    
    JRadioButton mtMi = new JRadioButton("metros - milhas");
    JRadioButton miMt = new JRadioButton("milhas - metros");
    
    ButtonGroup group  = new ButtonGroup();
    
    DecimalFormat formato = new DecimalFormat("###.##");
    
    public ConversorComprimento(){
        
        setSize(280,100);
        setLocation(50,50);
        setTitle("Conversor Comprimento");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new FlowLayout());
        
        group.add(mtMi);
        group.add(miMt);
        add(labelValorAConverter);
        add(textValor);
        add(mtMi);
        add(miMt);
        setVisible(true);
        
        miMt.addItemListener(new EventButton());
        mtMi.addItemListener(new EventButton());
      
    }
    
    public static void main(String[] args) {
        new ConversorComprimento();
    } 
    
    private class EventButton implements ItemListener{
        
        public void itemStateChanged(ItemEvent e){
        
            String valorString;
            double valor = Double.parseDouble(textValor.getText());

            if (e.getSource() == mtMi) {
                if(mtMi.isSelected()){
                    valor = valor * 0.000621371;
                    valorString = formato.format(valor) + " miles";
                    JOptionPane.showMessageDialog(null, valorString);
                }
            }
            else if(e.getSource() == miMt) {
                if(miMt.isSelected()){
                    valor = valor * 1609.34;
                    valorString = formato.format(valor) + " meters";
                    JOptionPane.showMessageDialog(null, valorString);               
                }
            } 
        }
    } 
}
4 - Conversor Peso
ItemEvent
package com.darque.graphicaula;

import java.awt.GridLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.text.DecimalFormat;
import javax.swing.*;


/**
 *
 * @author Darque
 */
public class ConversorPeso extends JFrame implements ItemListener{
    
    JLabel label1 = new JLabel("Valor a converter");
    JTextField textValor = new JTextField(5);
    
    JLabel label2 = new JLabel("Tipo de conversão");
    String[] vetor = {"Gramas - Onças", "Onças - Gramas"};
    JComboBox comboBox = new JComboBox(vetor);
    
    JLabel label3 = new JLabel("Resultado");
    JLabel textResultado = new JLabel();
    
    DecimalFormat formato = new DecimalFormat("#.###");
    
    public ConversorPeso(){
        
        setTitle("Conversor Peso");
        setLayout(new GridLayout(3, 2, 1, 5));
        setSize(280, 100);
        setLocation(200,200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        add(label1);
        add(textValor);
        add(label2);
        add(comboBox);
        add(label3);
        add(textResultado);
        
        setVisible(true);
        
        comboBox.addItemListener(this);
    }
    
    public void itemStateChanged(ItemEvent e){
        
        String valorString = (String) comboBox.getSelectedItem();
        double valor = Double.parseDouble(textValor.getText());
        
        if (valorString.equals(vetor[0])) {
            valor = valor * 0.0353;
            valorString = formato.format(valor);
            textResultado.setText(valorString);
            
        }
        else if (valorString.equals(vetor[1])) {
            valor = valor / 0.0353;
            valorString = formato.format(valor);
            textResultado.setText(valorString);
        }
    }
    
    public static void main(String[] args) {
        
        new ConversorPeso();
        
    }
    
}
5 - Conversor Capacidade
KeyListener e FocusListener
package com.darque.graphicaula;

import java.awt.*;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
import java.awt.event.FocusListener;
import java.awt.event.FocusEvent;
import java.text.DecimalFormat;
import javax.swing.*;

/**
 *
 * @author Darque
 */
public class ConversorCapacidade extends JFrame implements KeyListener, FocusListener {
    
    JLabel label1 = new JLabel("litros - galões");
    JTextField text1 = new JTextField(19);
    JLabel label2 = new JLabel("galões - litros");
    JTextField text2 = new JTextField(19);
    JLabel label3 = new JLabel("Introduza o nº na caixa indicada e pressione ENTER");
    
    DecimalFormat formato = new DecimalFormat("##.##");
    
    double valor;
    String textString;
    
    public ConversorCapacidade(){
        
        setTitle("Conversor Capacidade");
        setSize(320,120);
        setLocation(300,300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new FlowLayout(0));
        
        add(label1);
        add(text1);
        add(label2);
        add(text2);
        add(label3);
        
        setVisible(true);
        
        text1.addKeyListener(this);
        text2.addKeyListener(this);
        text1.addFocusListener(this);
        text2.addFocusListener(this);
    }
    
    public void keyPressed (KeyEvent e){
        
        if (e.getKeyCode() == KeyEvent.VK_ENTER) {
            if (e.getSource() == text1) {
                valor = Double.parseDouble(text1.getText());
                valor = valor * 0.22;
                textString = formato.format(valor);
                JOptionPane.showMessageDialog(null, "Resultado: " + textString + " galões", "Litros - Galoes", JOptionPane.PLAIN_MESSAGE);
            }
            else if (e.getSource() == text2) {
                valor = Double.parseDouble(text2.getText());
                valor = valor / 0.22;
                textString = formato.format(valor);
                JOptionPane.showMessageDialog(null, "Resultado: " + textString + " litros", "Galões - Litros", JOptionPane.PLAIN_MESSAGE);                
            }
        }
        
    }
    
    public void focusGained (FocusEvent e){
        
        if(e.getSource() == text1){
            text2.setText("");
        }
        else if (e.getSource() == text2) {
            text1.setText("");
        }
 
    }
    
    public void keyReleased(KeyEvent e){}
    
    public void keyTyped(KeyEvent e){}
    
    public void focusLost(FocusEvent e){}
    
    public static void main(String[] args) {
        new ConversorCapacidade();
    }
    
}
6 - Calculo Circulo (Area e Perímetro)
MouseEvent
package com.darque.graphicaula;

import java.awt.FlowLayout;
import java.awt.event.*;
import java.text.DecimalFormat;
import javax.swing.*;

/**
 *
 * @author Darque
 */
public class CalculoCirculo extends JFrame implements MouseListener {
    
    DecimalFormat format = new DecimalFormat("##.##");
    
    JLabel label1 = new JLabel("Medida do raio");
    JTextField textField = new JTextField(5);
    JCheckBox checkArea = new JCheckBox("Área");
    JCheckBox checkPerimetro = new JCheckBox("Perímetro");
    ButtonGroup grupoCheck = new ButtonGroup();
    JButton buttonCalcular = new JButton("Calcular");
    
    
    public CalculoCirculo(){
        
        setTitle("Círculo");
        setSize(220, 150);
        setLocation(300, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new FlowLayout(1));
        
        add(label1);
        add(textField);
        add(checkArea);
        grupoCheck.add(checkArea);
        grupoCheck.add(checkPerimetro);
        add(checkArea);
        add(checkPerimetro);
        add(buttonCalcular);
        
        setVisible(true);
        
        buttonCalcular.addMouseListener(this);
         
    }
    
    public void mouseClicked(MouseEvent e){
        
        String textString;
        double valor = Double.parseDouble(textField.getText());
        
        if(e.getSource() == buttonCalcular){
            if (checkArea.isSelected()) {
                valor = Math.PI * Math.pow(valor, 2);
                textString = format.format(valor);
                JOptionPane.showMessageDialog(null, "Área:  " + textString);
            }
            else if(checkPerimetro.isSelected()){
                valor = 2 * Math.PI * valor;
                textString = format.format(valor);
                JOptionPane.showMessageDialog(null, "Perímetro:  " + textString);
            }
        }
        
    } 
    
    public void mouseEntered(MouseEvent e){}
    
    public void mouseExited(MouseEvent e){}
    
    public void mouseReleased(MouseEvent e){}
    
    public void mousePressed(MouseEvent e){}
    
    public static void main(String[] args) {
        new CalculoCirculo();
    }

}
7 - Mostrar contactos
MouseEvent
package com.darque.graphicaula;

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import javax.swing.table.*;

/**
 *
 * @author Darque
 */
public class MostraContactos extends JFrame implements MouseListener{
    
    JLabel label1 = new JLabel("Contactos");
    String[] cabecalho = new String[]{"Nome", "Contacto"};
    DefaultTableModel model = new DefaultTableModel(null, cabecalho);
    JTable table = new JTable(model);
    JScrollPane scroll = new JScrollPane(table);
    
    public MostraContactos(){
        
        setTitle("Contacts");
        setSize(370, 170);
        setLocation(300,300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new FlowLayout());
        setVisible(true);
        
        add(label1);
        
        scroll.setPreferredSize(new Dimension(350,100));
        
        TableColumnModel modelColumn = table.getColumnModel();
        
        TableColumn column0 = modelColumn.getColumn(0);
        column0.setMaxWidth(100);
        TableColumn column1 = modelColumn.getColumn(1);
        column1.setMaxWidth(250);
        
        add(scroll);

        try {
            FileReader file = new FileReader("Contactos.txt");
            BufferedReader buffer = new BufferedReader(file);
            
            int i = 0;
            
            String[] cells = new String[]{null, null, null};
            
            while(buffer.ready()){
                model.addRow(cells);
                model.setValueAt(buffer.readLine(), i, 0);
                model.setValueAt(buffer.readLine(), i, 1);
                i++;
            }
            
            buffer.close();
            
        } 
        catch (IOException ioe) {
            System.out.println("Não foi possível ler o ficheiro!");
            ioe.printStackTrace(); 
        }
        
        table.addMouseListener(this);
        
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
       
    }
    
    public void mouseClicked(MouseEvent e){
        
        if(table.getSelectedRow() != -1){
            JOptionPane.showMessageDialog(null, "Foi selecionada a linha " + table.getSelectedRow());
        }
        
    } 
    
    public void mouseEntered(MouseEvent e){}
    
    public void mouseExited(MouseEvent e){}
    
    public void mouseReleased(MouseEvent e){}
    
    public void mousePressed(MouseEvent e){}
    
    public static void main(String[] args) {
        new MostraContactos();
    }
    
}

Escrever para um ficheiro
import java.io.FileWriter;   // Import the FileWriter class
import java.io.IOException;  // Import the IOException class to handle errors

public class WriteToFile {
  public static void main(String[] args) {
    try {
      FileWriter myWriter = new FileWriter("filename.txt");
      myWriter.write("Files in Java might be tricky, but it is fun enough!");
      myWriter.close();
      System.out.println("Successfully wrote to the file.");
    } catch (IOException e) {
      System.out.println("An error occurred.");
      e.printStackTrace();
    }
  }
}
Contar Input
public static void count(String x)
 {
    int letter=0,digit=0,spaces=0,other=0;

    for(int i=0;i<x.length();i++)
    {
      if(Character.isLetter(x.charAt(i)))
      {
         letter ++;
      }
      else if(Character.isDigit(x.charAt(i)))
      {
        digit ++;
      }
      else if(Character.isSpaceChar(c[i]))
      {
        spaces ++;
      }
      else
      {
        other ++;
      }
    } 
    System.out.println(" the total letter is "+ letter);
    System.out.println(" the total digits is "+ digit);
    System.out.println(" the total spaces is "+ spaces);
    System.out.println("other is "+ other);
8 - Menus

center

package com.darque.graphicaula;

import java.awt.GridLayout;
import java.awt.event.*;
import javax.swing.*;

/**
 *
 * @author Darque
 */
public class UsaMenus extends JFrame implements ActionListener{
    
    JMenuBar menuBar = new JMenuBar();
    
    JMenu conversorTemperatura = new JMenu("Temperatura");
    JMenuItem conversorTemperaturaActionEvent = new JMenuItem("Action Event");
    JMenuItem conversorTemperaturaItemEvent = new JMenuItem("Item Event");
    
    JMenu conversorPeso = new JMenu("Peso");
    JMenuItem conversorPesoItemEvent = new JMenuItem("Item Event");
    
    JMenu conversorCapacidade = new JMenu("Capacidade");
    JMenuItem conversorCapacidadeKeyFocus = new JMenuItem ("Key/Focus Event");
    
    JLabel label1 = new JLabel("BEM-VINDO AO MENU");
    JLabel label2 = new JLabel("Faça a sua seleção!");
    
    public UsaMenus(){
        
        setTitle("Menus");
        setSize(500, 200);
        setLocation(300, 300);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        setLayout(new GridLayout(3, 1));
        
        setJMenuBar(menuBar);
        
        menuBar.add(conversorTemperatura);
        conversorTemperatura.add(conversorTemperaturaActionEvent);
        conversorTemperatura.add(conversorTemperaturaItemEvent);
        
        menuBar.add(conversorPeso);
        conversorPeso.add(conversorPesoItemEvent);
        
        menuBar.add(conversorCapacidade);
        conversorCapacidade.add(conversorCapacidadeKeyFocus);
        
        conversorTemperaturaActionEvent.addActionListener(this);
        conversorTemperaturaItemEvent.addActionListener(this);
        conversorPesoItemEvent.addActionListener(this);
        conversorCapacidadeKeyFocus.addActionListener(this);
        
        label1.setHorizontalAlignment(JLabel.CENTER);
        add(label1);
        label2.setHorizontalAlignment(JLabel.CENTER);
        add(label2);
        
        setVisible(true);
        
    }
    
    public void actionPerformed (ActionEvent e){
        
        if(e.getSource() == conversorTemperaturaActionEvent){
            ConversorTemperatura.main(null);
        }
        else if(e.getSource() == conversorTemperaturaItemEvent){
            ConversorTemperatura.main(null);
        }
        else if(e.getSource() == conversorPesoItemEvent){
            ConversorPeso.main(null);
        }
        else if(e.getSource() == conversorCapacidadeKeyFocus){
            ConversorCapacidade.main(null);
        }
        
    }
    
    public static void main(String[] args) {
        new UsaMenus();
    }
    
    
}

Key - Mais de uma tecla
int key= KeyEvent.getKeyCode();

if((((key>=65)&&(key<=90))||((key>=97)&&(key<=122))||((key>=48)&&(key<=57)))
{
//Do action
}
List keyEvents = new ArrayList<KeyEvent>();
keyEvents.add(KeyEvent.VK_A);
keyEvents.add(KeyEvent.VK_B);
keyEvents.add(KeyEvent.VK_C);
keyEvents.add(KeyEvent.VK_D);

public void keyPressed(KeyEvent e) {
if(keyEvents.contains(e.getKeyCode())){  

    }   
}

Sistema Unicode

Unicode é um padrão adotado mundialmente

Que possibilita com que todos os caracteres de todas as linguagens escritas utilizadas no planeta possam ser representados em computadores.

Convenção de nomes

Classes

Utilize substantivos ou frases substantivas descritivas.
Deixe maiúscula a primeira letra de cada substantivo que compõe o nome.
-> ex: MyFirstClassName

Métodos

Use verbos para nome de métodos.
Faça a primeira letra do nome minúscula com cada letra inicial interna maiúscula
-> ex: getUserName()

Variáveis

Escolha nomes que indiquem o uso pretendido da variável.
Utilize a primeira letra do nome minúscula e a inicial das outras palavras que formam o nome maiúscula
-> ex: customerLastName

Modificadores de acesso

Java controla o acesso a atributos e métodos através do uso dos modificadores de acesso. São eles:
public

-> O menos restritivo

-> Atributos e métodos com este modificador, podem ser acedidos por:

  • métodos da própria classe
  • classes derivadas desta
  • qualquer outra classe em qualquer outro pacote
protected

-> Atributos e métodos com este modificador, podem ser acedidos por:

  • métodos da própria classe
  • classes derivadas
private

-> O mais restritivo

->Atributos e métodos com este modificador, podem ser acedidos por:

  • métodos da própria classe
Quando não é definido

-> Atributos e métodos sem modificador, podem ser acedidos por:

  • métodos da própria classe
  • classes derivadas
  • qualquer outra classe dentro do mesmo pacote

Características da linguagem

Java é independente de plataforma, é uma linguagem baseada em software

É compilado por um compilador e convertido para bytecode. Este bytecode é um código independente de plataforma.
-> WORA - Write Once and Run Anywhere

É uma linguagem mais pesada e lenta
Java possui dois componentes:
  • Ambiente de tempo de execução
  • API (Interface de Programação de Aplicativos)
Programas Java são executados numa máquina virtual
Arquitetura neutra pois não há recursos dependentes da implementação. Exemplo:

Tipo dado INT em arquitetura C =/= Java

em C:
-> 32 bits -> 2 bytes de memória
-> 64 bits -> 4 bytes de memória

em Java:
-> 32 bits -> 4 bytes de memória
-> 64 bits -> 4 bytes de memória

Java é uma linguagem interpretada - As instruções são executadas ao longo delas, não é criado um programa como na compilação.
Java não suporta structs
Java usa a palavra reservada import para incluir diferentes classes e métodos, não suporta cabeçalhos de arquivos.
É possível ter múltiplas classes num arquivo java

center

Execução em CMD

Para correr a aplicação java no cmd

-> Ir para a localização onde se encontra o documento
-> javac nomedocumento.java para compiilar
-> java nomedocumento.java para executar

center

Aplicações Java permitem que se passe parâmetros através da linha de comando.

Os parâmetros são passados para as aplicações através do vetor de strings do método main

Parâmetro lenght

Através do método length pode-se verificar o número de parâmetros passados. O acesso é feito indicando-se a posição no array, sempre iniciando em ( ).

Exemplo
public static void main(String[] args) {  
	System.out.println("O meu nome é: " + args[0] + " e tenho " + args[1] + " anos.");
	System.out.println("Numero de parametros: " + args.length);
}

CMD:

java ClassName.java Nome idade

center

JVM, JRE e JDK

center

JVM
Java Virtual Machine
É uma máquina virtual

É uma especificação que fornece um ambiente de tempo de execução no qual o bytecode pode ser executado.
Isto porque não existe fisicamente.

Executa as seguintes tarefas principais:

-> Carrega código
-> Verifica código
-> Executa código
-> Fornece ambiente de tempo de execução

Fornece definições para:

-> Área de memória
-> Formato de arquivo de classe
-> Conjunto de registros
-> Pilha de garbage collector
-> Relatório de erros fatais
-> Etc.

center

JRE
Java Runtime Environment
É um, conjunto de ferramentas de sofware usadas para o desenvolvimento de aplicações java

É usado para fornecer o ambiente de tempo de execução.
É a implementação da JVM.
Existe fisicamente.

JDK
Java Development Kit
É um ambiente de desenvolvimento de software

É usado para desenvolver aplicações e applets (pequenos programas) Java.
Contém o JRE + ferramentas de desenvolvimento.
Contém uma JVM privada e alguns outros recursos.
Existe fisicamente.

Para além da JVM, contém os recursos:

-> Interpretador / Carregador (java)
-> Compilador (javac)
-> Arquivador (jar)
-> Gerador de documentação (Javadoc)
-> etc

center

Compilação

center

Ficheiros

Simple.java -> Código fonte java
Simple.class -> Código fonte em bytecode

.java

O código fonte de programas Java é armazenado em arquivos com extensão .java
-> ex: Cliente.java

.class

Quando compilamos um arquivo fonte, será gerado um arquivo com extensão .class para cada classe definida e com o mesmo nome da classe. O arquivo .class contém o bytecode gerado com a compilação.
-> ex: Cliente.class

Execução

Na execução são realizadas as seguintes etapas:

200 | center

O mecanismo de execução contém:

-> Um processador virtual
-> Interpretador: Lé o fluxo do bytecode e executa as instruções
-> Compilador JIT (Just-in-time): Compila parte do código de bytes que possuem funcionalidade semelhante ao mesmo tempo, reduzindo a quantidade de tempo necessário para a compilação.
center